package demo.letcode.top100;

/**
 * 一个有名的按摩师会收到源源不断的预约请求，每个预约都可以选择接或者不接。
 * 在每次预约服务之间要有休息时间，因此她不能接收相邻的预约。
 * 给定一个预约请求序列，替按摩师找到最优的预约集合(总预约时间最长)，返回总的分钟数
 * 输入[1,2,3,1]
 * 输出4
 * 解释 选择1号和3号，1+3=4
 *
 * 示例2
 * 输入[2,7,9,3,1]
 * 输出 12
 * 解释：2+9+1=12
 *
 * @author taqo
 * @date 2021/5/11
 */
public class _动态规划解按摩师的最长预约时间 {
    public static void main(String[] args) {
        int a[] = {1, 2, 3, 1};
        System.out.println(message(a));
    }

    private static int message(int[] a) {
        // int a[] = {1, 2, 3, 1};
        int len = a.length;
        int dp0 = 0; // 第1个没接 没有接的总分钟
        int dp1 = a[0]; // 第1个接了，接了的总分分钟
        for (int i = 1; i < len; i++) {
            // 表示第i+1个没有接，第i个没有接是可以的，选最大的
            int tmp = Math.max(dp0, dp1);// 选最大的
            System.out.println("dp0:"+dp0);
            System.out.println("dp1:"+dp1);
            // 什么意思？？？？ a[0]不是选了吗 为什么要+d0
            // 表示第i+1个接了，第i个必须没接，a[i]表示第i+1个预约时间
            dp1 = dp0 + a[i];// d0没选+本次可选或不选
            dp0 = tmp; // 最大的不选？？
            System.out.println();
        }
        return Math.max(dp0, dp1);
    }
}
